<?php
/**
 * Контроллер для минификации яваскриптов и css-файлов
 * 
 * @category Phorm
 * @package Controller_Module_Default
 * @name /Phorm/Controller/Module/Default/Minify.php
 * @copyright phorm.ru
 * @since 09.11.2012
 * @author vladimir@kachalov.net
 */

class Phorm_Controller_Module_Default_Minify extends Phorm_Controller_Controller {
	
	/**
	 * Путь к JS-файлам
	 * @var string
	 */
	private $_jsdir;
	
	/**
	 * Путь к CSS-файлам
	 * @var string
	 */
	private $_cssdir;
	
	/**
	 * Объект файлового кеша
	 * @var Zend_Cache
	 */
	private $_cache;
	
	/**
	 * Предиспетчер
	 * 
	 * @return void
	 */
	
	public function preDispatch() {
		
		$this->_jsdir = DOCUMENT_PATH . '/js/';
		$this->_cssdir = DOCUMENT_PATH . '/css/';
		
		$this->_cache = $this->_boot->getPluginResource('Cachemanager')->getCacheManager()->getCache('files');
		
		Zend_Controller_Action_HelperBroker::removeHelper('viewRenderer');
		
	}
	
	/**
	 * Минификация яваскриптов
	 * 
	 * @return void
	 */
	
	public function jsAction() {
		
		$this->_response->setHeader('Content-Type','text/javascript',true);
		
		
		if(isset($this->_params['files'])) {
			
			$files = explode(',',$this->_params['files']);
			
			foreach ($files as $key=>$file) {
				$file = $this->_jsdir . trim($file) . '.js';
				if(file_exists($file)) $files[$key] = $file;
			}
			
			if(!empty($files)) {

				$cacheid = 'minify_js_' . md5(implode(',',$files));
				$this->_cache->setMasterFiles($files);
				
				if($this->_cache->test($cacheid)) {
				
					$this->_response->setBody($this->_cache->load($cacheid));
					
				} else {
					
					require_once 'Phorm/Plugin/jsmin.php';
					
					$str = '';
					foreach ($files as $file) $str .= file_get_contents($file) . PHP_EOL;
					
					$js = JSMin::minify($str);
					
					$this->_cache->save($js,$cacheid);
					
					$this->_response->setBody($js);
					
				}
				
			}
			
		}
		
	}
	
	
	/**
	 * Минификация css-файлов
	 * 
	 * @return void
	 */
	
	public function cssAction() {
		
		
	}
	
}